package cn.csc.module.pay.dal.mysql.rate;

import cn.csc.framework.common.pojo.PageResult;
import cn.csc.framework.mybatis.core.mapper.BaseMapperX;
import cn.csc.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.csc.module.pay.controller.admin.rate.vo.PayJzbRateExportReqVO;
import cn.csc.module.pay.controller.admin.rate.vo.PayJzbRatePageReqVO;
import cn.csc.module.pay.dal.dataobject.rate.PayJzbRateDO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 见证宝提现手续费率 Mapper
 *
 * @author liuchuang
 */
@Mapper
public interface PayJzbRateMapper extends BaseMapperX<PayJzbRateDO> {

    default PageResult<PayJzbRateDO> selectPage(PayJzbRatePageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<PayJzbRateDO>()
                .eqIfPresent(PayJzbRateDO::getDicData, reqVO.getDicData())
                .eqIfPresent(PayJzbRateDO::getMerchantId, reqVO.getMerchantId())
                .eqIfPresent(PayJzbRateDO::getIsDefault, reqVO.getIsDefault())
                .betweenIfPresent(PayJzbRateDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(PayJzbRateDO::getId));
    }

    default List<PayJzbRateDO> selectList(PayJzbRateExportReqVO reqVO) {
        return selectList(new LambdaQueryWrapperX<PayJzbRateDO>()
                .eqIfPresent(PayJzbRateDO::getDicData, reqVO.getDicData())
                .eqIfPresent(PayJzbRateDO::getMerchantId, reqVO.getMerchantId())
                .eqIfPresent(PayJzbRateDO::getIsDefault, reqVO.getIsDefault())
                .betweenIfPresent(PayJzbRateDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(PayJzbRateDO::getId));
    }

    default PayJzbRateDO selectByDicData(Integer dicType, Long merchantId, String dicData) {
        return selectOne(new LambdaQueryWrapperX<PayJzbRateDO>()
                .eq(PayJzbRateDO::getDicType, dicType)
                .eq(PayJzbRateDO::getMerchantId, merchantId)
                .eq(PayJzbRateDO::getDicData, dicData));
    }

    default PayJzbRateDO selectMaxRateByDicData(Integer dicType, Long merchantId, String[] dicDatas) {
        return selectOne(new LambdaQueryWrapperX<PayJzbRateDO>()
                .eq(PayJzbRateDO::getDicType, dicType)
                .eq(PayJzbRateDO::getMerchantId, merchantId)
                .in(PayJzbRateDO::getDicData, dicDatas)
                .orderByDesc(PayJzbRateDO::getDicValue)
                .last("limit 1")

        );
    }

    default PayJzbRateDO selectDefault(Long merchantId) {
        return selectOne(new LambdaQueryWrapperX<PayJzbRateDO>()
                .eqIfPresent(PayJzbRateDO::getDicType, 1)
                .eq(PayJzbRateDO::getMerchantId, merchantId)
                .eq(PayJzbRateDO::getIsDefault, true));
    }

}
